import { getToken, setToken, removeToken, set_timeStamp } from '@/utils/auth'

import { login, getUserInfo, getUserDetailById } from '@/api/user'

import { Message } from 'element-ui'

export default {
  namespaced: true,

  state: {
    token: getToken(), // 用户token
    userInfo: {} // 用户信息
  },

  mutations: {
    // 修改token：
    setToken(state, data) {
      state.token = data
      setToken(data)
    },
    // 移除token：
    removeToken(state, data) {
      state.token = null
      removeToken() // auth中的方法 Cookies
    },
    // 用户信息
    set_userInfo(state, data) {
      state.userInfo = { ...data }
    },
    // 删除用户信息
    remove_userInfo(state, data) {
      state.userInfo = {}
    }
  },
  actions: {
    // 登录
    async login(context, data) {
      try {
        const res = await login(data)
        context.commit('setToken', res) // 将token写入Cookies
        // 登录成功后, 更新token时间戳
        set_timeStamp()
      } catch (err) {
        Message.error(err)
        return Promise.reject(new Error(err))
      }
    },

    // 获取用户信息
    async getUserInfo(context, data) {
      const res = await getUserInfo() // 获取用户基本信息
      const res2 = await getUserDetailById(res.userId) // 获取用户详细信息  通过获取到的基本信息中的用户ID获取
      // { ...res, ...res2 }  >>> 意为将两个对象解开放入一个对象中
      context.commit('set_userInfo', { ...res, ...res2 }) // 提交mutations
      return { ...res, ...res2 }
    },

    // 退出登录
    outLogin(context, data) {
      context.commit('removeToken') // 移除token
      context.commit('remove_userInfo') // 移除用户信息
    }
  }
}
